package org.tpc.printtolls.example;

import org.tpc.printtolls.api.PrintAPI;
import org.tpc.printtolls.model.PrintRequest;
import org.tpc.printtolls.model.PrintResult;

import java.util.List;

/**
 * 打印组件使用示例
 * 
 * 这个类演示了如何使用打印组件的各种功能
 */
public class PrintExample {
    
    public static void main(String[] args) {
        // 创建打印API实例
        PrintAPI printAPI = new PrintAPI();
        
        // 示例1：获取可用打印机列表
        System.out.println("=== 示例1：获取可用打印机列表 ===");
        List<String> printers = printAPI.getAvailablePrinters();
        System.out.println("可用打印机数量: " + printers.size());
        for (String printer : printers) {
            System.out.println("- " + printer);
        }
        
        // 检查是否有可用打印机
        if (printers.isEmpty()) {
            System.out.println("没有找到可用的打印机，无法继续演示打印功能");
            return;
        }
        
        // 示例2：获取默认打印机
        System.out.println("\n=== 示例2：获取默认打印机 ===");
        String defaultPrinter = printAPI.getDefaultPrinter();
        if (defaultPrinter != null) {
            System.out.println("默认打印机: " + defaultPrinter);
        } else {
            System.out.println("未找到默认打印机");
        }
        
        // 选择要使用的打印机（使用第一个可用的打印机）
        String selectedPrinter = printers.get(0);
        System.out.println("选择打印机: " + selectedPrinter);
        
        // 示例3：简单打印（A4纸张）
        System.out.println("\n=== 示例3：简单A4打印 ===");
        // 注意：这里使用一个示例PDF URL，实际使用时请替换为真实的PDF文件URL
        String pdfUrl = "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";
        
        PrintResult result = printAPI.printA4(selectedPrinter, 1, pdfUrl);
        printResult("简单A4打印", result);
        
        // 示例4：高级打印（自定义参数）
        System.out.println("\n=== 示例4：高级打印 ===");
        result = printAPI.print(
            selectedPrinter,    // 打印机名称
            210,                // 纸张宽度（A4）
            297,                // 纸张高度（A4）
            2,                  // 打印份数
            pdfUrl,             // PDF URL
            false,              // 不使用双面打印
            3                   // 高质量打印
        );
        printResult("高级打印", result);
        
        // 示例5：使用PrintRequest对象
        System.out.println("\n=== 示例5：使用PrintRequest对象 ===");
        PrintRequest request = new PrintRequest();
        request.setPrinterName(selectedPrinter);
        request.setPaperWidth(148);     // A5宽度
        request.setPaperHeight(210);    // A5高度
        request.setCopies(1);
        request.setPdfUrl(pdfUrl);
        request.setDuplex(true);        // 双面打印
        request.setQuality(2);          // 普通质量
        
        result = printAPI.print(request);
        printResult("使用PrintRequest对象", result);
        
        // 示例6：检查打印机可用性
        System.out.println("\n=== 示例6：检查打印机可用性 ===");
        boolean isAvailable = printAPI.isPrinterAvailable(selectedPrinter);
        System.out.println("打印机 '" + selectedPrinter + "' 是否可用: " + isAvailable);
        
        // 检查不存在的打印机
        boolean notAvailable = printAPI.isPrinterAvailable("不存在的打印机");
        System.out.println("打印机 '不存在的打印机' 是否可用: " + notAvailable);
        
        System.out.println("\n=== 示例演示完成 ===");
    }
    
    /**
     * 打印结果信息
     */
    private static void printResult(String testName, PrintResult result) {
        System.out.println(testName + " 结果:");
        if (result.isSuccess()) {
            System.out.println("  ✓ 打印成功");
            System.out.println("  任务ID: " + result.getJobId());
            System.out.println("  页数: " + result.getPageCount());
            System.out.println("  份数: " + result.getActualCopies());
            System.out.println("  开始时间: " + result.getStartTime());
            System.out.println("  完成时间: " + result.getEndTime());
        } else {
            System.out.println("  ✗ 打印失败");
            System.out.println("  错误信息: " + result.getErrorMessage());
        }
    }
    
    /**
     * 演示预定义纸张尺寸的使用
     */
    public static void demonstratePaperSizes() {
        System.out.println("=== 预定义纸张尺寸 ===");
        System.out.println("A4: " + PrintAPI.PaperSize.A4[0] + "x" + PrintAPI.PaperSize.A4[1] + "mm");
        System.out.println("A3: " + PrintAPI.PaperSize.A3[0] + "x" + PrintAPI.PaperSize.A3[1] + "mm");
        System.out.println("A5: " + PrintAPI.PaperSize.A5[0] + "x" + PrintAPI.PaperSize.A5[1] + "mm");
        System.out.println("Letter: " + PrintAPI.PaperSize.LETTER[0] + "x" + PrintAPI.PaperSize.LETTER[1] + "mm");
        System.out.println("Legal: " + PrintAPI.PaperSize.LEGAL[0] + "x" + PrintAPI.PaperSize.LEGAL[1] + "mm");
    }
} 